Système de Gestion des Communications Téléphoniques (Kali Linux Edition) 📞

Ce programme Python vous permet de gérer les communications téléphoniques (appels, SMS) sur un environnement Kali Linux. Le projet inclut la collecte de métadonnées des appels et SMS, le chiffrement AES des SMS, la capture de paquets réseau et la détection d'anomalies en temps réel.

Fonctionnalités du Programme :

Code Python :


import datetime
import smtplib
from scapy.all import sniff
import threading
import matplotlib.pyplot as plt
from Crypto.Cipher import AES
import base64
import os
import json

# Fichier pour stocker les métadonnées des communications
COMM_FILE = 'telecom_metadata_kali.json'

# Clé et configuration AES pour chiffrer les SMS
AES_KEY = os.urandom(16)  # Génère une clé AES aléatoire de 16 octets
AES_IV = os.urandom(16)   # Génère un vecteur d'initialisation aléatoire

# Fonction pour chiffrer les messages avec AES
def encrypt_message_aes(message):
    cipher = AES.new(AES_KEY, AES.MODE_CFB, AES_IV)
    encrypted = base64.b64encode(cipher.encrypt(message.encode()))
    return encrypted.decode()

# Fonction pour déchiffrer les messages avec AES
def decrypt_message_aes(encrypted_message):
    cipher = AES.new(AES_KEY, AES.MODE_CFB, AES_IV)
    decrypted = cipher.decrypt(base64.b64decode(encrypted_message.encode()))
    return decrypted.decode()

# Fonction pour stocker les métadonnées des appels/SMS dans un fichier JSON
def store_metadata(type_comm, sender, receiver, timestamp, duration=None, sms_content=None):
    entry = {
        'timestamp': timestamp,
        'type_comm': type_comm,
        'sender': sender,
        'receiver': receiver,
        'duration': duration,
        'sms_content': sms_content
    }
    
    # Lecture et écriture du fichier JSON
    try:
        with open(COMM_FILE, 'r') as file:
            data = json.load(file)
    except FileNotFoundError:
        data = []

    data.append(entry)

    with open(COMM_FILE, 'w') as file:
        json.dump(data, file, indent=4)

# Fonction pour lire et afficher toutes les métadonnées enregistrées
def list_metadata():
    try:
        with open(COMM_FILE, 'r') as file:
            data = json.load(file)
            if not data:
                print("Aucune communication enregistrée.")
            else:
                for entry in data:
                    print(f"{entry['timestamp']} - {entry['type_comm']} - De: {entry['sender']} à {entry['receiver']} - Durée: {entry.get('duration', 'N/A')} - Message: {entry.get('sms_content', 'N/A')}")
    except FileNotFoundError:
        print("Le fichier de métadonnées est introuvable.")

# Simuler la collecte de métadonnées d'un appel téléphonique
def collect_call_metadata():
    sender = "06 11 22 33 44"
    receiver = input("Entrez le numéro du destinataire de l'appel : ")
    duration = input("Entrez la durée de l'appel en secondes : ")
    timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    
    # Stocker les métadonnées de l'appel
    store_metadata("appel", sender, receiver, timestamp, duration=duration)

# Simuler la collecte de métadonnées d'un SMS avec chiffrement AES
def collect_sms_metadata():
    sender = "06 11 22 33 44"
    receiver = input("Entrez le numéro du destinataire du SMS : ")
    sms_content = input("Entrez le contenu du SMS : ")
    timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

    # Chiffrer le SMS avec AES
    encrypted_content = encrypt_message_aes(sms_content)
    
    # Stocker les métadonnées du SMS avec chiffrement AES
    store_metadata("sms", sender, receiver, timestamp, sms_content=encrypted_content)

# Fonction pour capturer les paquets réseau (exemple sur l'interface eth0)
def packet_callback(packet):
    print(packet.summary())

def capture_traffic(interface="eth0", duration=10):
    print(f"Début de la capture de paquets sur {interface} pour {duration} secondes...")
    sniff(iface=interface, prn=packet_callback, timeout=duration)

# Fonction pour envoyer une alerte par email
def send_alert(subject, message):
    msg = MIMEText(message)
    msg['Subject'] = subject
    msg['From'] = "alert@telecomsystem.com"
    msg['To'] = "admin@yourdomain.com"
    
    # Configuration SMTP (à adapter avec votre serveur mail)
    s = smtplib.SMTP('localhost')
    s.send_message(msg)
    s.quit()

# Détection d'anomalies dans les communications (par exemple, plus de 100 appels en 10 minutes)
def detect_anomalies():
    try:
        with open(COMM_FILE, 'r') as file:
            data = json.load(file)
            recent_communications = [
                entry for entry in data if datetime.datetime.strptime(entry['timestamp'], '%Y-%m-%d %H:%M:%S') >= datetime.datetime.now() - datetime.timedelta(minutes=10)
            ]
            if len(recent_communications) > 100:  # Seuil d'alerte : plus de 100 appels en 10 minutes
                send_alert("Anomalie détectée", f"Un pic d'activité anormal de {len(recent_communications)} appels a été détecté.")
    except FileNotFoundError:
        print("Le fichier de communications est introuvable.")

# Statistiques d'appels/messages
def plot_call_stats():
    try:
        with open(COMM_FILE, 'r') as file:
            data = json.load(file)
            if not data:
                print("Aucune donnée pour les statistiques.")
                return
            times = [datetime.datetime.strptime(entry['timestamp'], '%Y-%m-%d %H:%M:%S') for entry in data]
            plt.hist(times, bins=10)
            plt.xlabel("Temps")
            plt.ylabel("Nombre de communications")
            plt.title("Statistiques des communications")
            plt.show()
    except FileNotFoundError:
        print("Le fichier de communications est introuvable.")

# Threading pour exécuter des tâches en parallèle (par exemple, capture réseau et détection d'anomalies)
def start_monitoring():
    # Lancer la capture de paquets réseau en arrière-plan
    network_thread = threading.Thread(target=capture_traffic, args=("eth0", 30))
    network_thread.start()

    # Lancer la détection d'anomalies en arrière-plan
    anomaly_thread = threading.Thread(target=detect_anomalies)
    anomaly_thread.start()

    network_thread.join()
    anomaly_thread.join()

# Programme principal
if __name__ == "__main__":
    print("Système de Gestion des Communications Téléphoniques (Kali Linux Edition)\n")

    while True:
        print("1. Ajouter un appel téléphonique")
        print("2. Ajouter un SMS")
        print("3. Afficher les métadonnées des communications")
        print("4. Voir les statistiques des appels/SMS")
        print("5. Démarrer le monitoring en temps réel")
        print("6. Quitter")

        choix = input("Choisissez une option : ")

        if choix == "1":
            collect_call_metadata()
        elif choix == "2":
            collect_sms_metadata()
        elif choix == "3":
            list_metadata()
        elif choix == "4":
            plot_call_stats()
        elif choix == "5":
            start_monitoring()
        elif choix == "6":
            break
        else:
            print("Option invalide, veuillez réessayer.")

Manuel d'Utilisation

Lancer le Programme :

Pour exécuter le programme sur Kali Linux, ouvrez un terminal et lancez :

python gestion_communications_kali.py

Options Disponibles :

Personnalisation :

Vous pouvez personnaliser le chiffrement AES, ajuster les interfaces réseau pour la capture des paquets, et adapter les alertes d'anomalies en fonction de vos besoins spécifiques.

Attention :

Veuillez utiliser ce programme exclusivement sur des téléphones ou des systèmes dont vous êtes propriétaire ou pour lesquels vous avez obtenu une autorisation explicite. Toute utilisation non autorisée à des fins de surveillance ou d'interception constitue une violation de la vie privée et est illégale. Ce projet est destiné à des usages éducatifs et éthiques conformément aux lois en vigueur.